1) Objetivo
Modelar e implementar um mini-sistema para registrar e consultar informações de um torneio de futevôlei usando apenas os conceitos de OO listados acima.
2) Escopo funcional (mínimo)
- Cadastro de jogadores, duplas e partidas.
- Registro de resultados por set (placares).
- Consultas: listar duplas inscritas, histórico simples de uma partida, placar final.
- Estatísticas diretas por métodos (vitórias/derrotas), sem estruturas avançadas.
Observação: Não utilizar coleções avançadas, exceções customizadas, interfaces, enums, ou padrões que não estejam na lista dos conceitos citados no topo da descrição.
3) Entidades e relacionamentos
Pessoa classe abstrata
- Herança: base para
Jogador. - Encapsulamento: nome, documento.
- Método abstrato: getIdentificacao().
Jogador extends Pessoa
- final: nascimento imutável.
- Sobrescrita: implementa getIdentificacao().
- super: construtor chama Pessoa.
Dupla agregação
- É formada por dois
Jogador; jogadores existem fora da dupla. - Método: getApresentacao().
Partida associação + composição
- Associação com duas
Dupla(mandante e visitante). - Composição de
SetPartida(sets vivem e morrem com a partida). - static: gerador sequencial de IDs.
SetPartida composição
- final: placares imutáveis.
- Valida regras de vitória do set (mínimo e diferença).
4) Regras de negócio (resumo)
- Vitória de set: mínimo 21 pontos e diferença ≥ 2.
- Melhor de 3 sets (vence quem faz 2). Máximo de 3 sets.
- Após encerrar a partida, não aceitar novos sets.
- Dupla sempre com 2 jogadores válidos.
5) Mapeamento dos conceitos de OO
- Classes/Atributos/Métodos/Objetos: em todas as entidades e no Main.
- Encapsulamento: atributos privados + getters/setters essenciais.
- static: contador de IDs e constantes de regras.
- final: campos imutáveis (SetPartida, Jogador.nascimento, Partida.id).
- Associação: Partida ↔ Dupla.
- Agregação: Dupla tem Jogador.
- Composição: Partida contém SetPartida.
- Herança + Classe Abstrata: Jogador extends Pessoa.
- Sobrescrita: Jogador#getIdentificacao().
- super: construtor de Jogador chama o de Pessoa.
6) Como compilar e executar
####################################################
Criar um projeto java no VS code;
definir os pacotes necessários e organizar
o código dentro dos pacotes.
Executar o programa principal e verificar
se o programa exibe a saída esperada.
7) Programa principal (Main.java)
// Demonstração do uso dos conceitos solicitados
public class Main {
public static void main(String[] args) {
// --- Jogadores (objetos) ---
Jogador a1 = new Jogador("Marcos", "111.111.111-11", "1993-07-01");
Jogador a2 = new Jogador("Rafael", "222.222.222-22", "1992-02-10");
Jogador b1 = new Jogador("Tiago", "333.333.333-33", "1990-03-05");
Jogador b2 = new Jogador("Leandro","444.444.444-44", "1991-12-12");
// --- Duplas (agregação de jogadores) ---
Dupla areiaBraba = new Dupla("Areia Braba", a1, a2);
Dupla ventoSul = new Dupla("Vento Sul", b1, b2);
// --- Partida (associação entre duplas, composição de sets) ---
Partida p1 = new Partida(areiaBraba, ventoSul, "Arena Central", "2025-11-15");
System.out.println(p1);
System.out.println(a1.getIdentificacao()); // herança + sobrescrita
System.out.println(b1.getIdentificacao());
// Registrar sets válidos (regras: 21+ e diferença >= 2)
boolean s1 = p1.registrarSet(21, 17); // 1–0 Areia Braba
boolean s2 = p1.registrarSet(18, 21); // 1–1
boolean s3 = p1.registrarSet(22, 20); // 2–1 Areia Braba (encerra)
System.out.println("Set1 registrado? " + s1);
System.out.println("Set2 registrado? " + s2);
System.out.println("Set3 registrado? " + s3);
System.out.println("Status: " + p1.getStatus());
System.out.println("Placar: " + p1.placarResumo());
Dupla vencedor = p1.getVencedor();
System.out.println("Vencedor: " + (vencedor == null ? "Indefinido" : vencedor.getApresentacao()));
// Tentativa de registrar outro set após encerrar (deve falhar)
boolean s4 = p1.registrarSet(25, 23);
System.out.println("Set4 (após encerrar) registrado? " + s4);
System.out.println(p1);
}
}
